<?php
include_once 'Connexion.class.php';
include_once 'UserDAO.class.php';


/*
 *  la classe AvisDAO va servir de passerelle entre la base et le site, 
 *  elle va remplir des objets de type Avis.
 *  Elle ajouter, modifier, supprimer, récupérer ces objets depuis la base.
 *  Elle hérite de Connexion pour récupérer l'objet PDO. 
 */


class AvisDAO extends Connexion{
    
     public function __Construct() {
        parent::__Construct();
    }
    
    
    public function ajouterAvis(Avis $avis){
        $req = "INSERT INTO avis VALUES(NULL, NOW(), NULL, ".$avis->getNote().", ".$avis->getAuteur()->getId().", ".$avis->getProduit()->getReference().", '".$avis->getCommentaire()."', 0);";
        $stmt = $this->_PDO->exec($req);
        if($stmt == 1)
            return true;
        else
            return false;
    }
    
    
    public function getLesAvisByIdProduit($idProduit){
        $lesAvis = array();
       
        $stmt = $this->_PDO->query("SELECT * FROM avis WHERE idProduit = ".  intval($idProduit)."");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lesAvis[] = $this->hydrateAvis($data);
            }
        }
        else{
            $lesAvis = null;
        }
        return $lesAvis;
        
    }
    
    public function getAvisById($idAvis){
        $avis;
        $stmt = $this->_PDO->query("SELECT * FROM avis WHERE id = ".intval($idAvis)."");
        if($stmt->rowCount() > 0){
            $avis = $this->hydrateAvis($stmt->fetch(PDO::FETCH_OBJ));
        }
        else
            $avis = null;
        return $avis;
    }
    
    
    public  function getLesAvisByIdAuteur($idAuteur){
        $lesAvis = array();
        $stmt = $this->_PDO->query("SELECT * FROM avis WHERE idAuteur = ".  intval($idAuteur)."");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lesAvis[] = $this->hydrateAvis($data);
            }
        }
        else{
            $lesAvis = null;
        }
        return $lesAvis;
    }
    
    public function getLesAvis(){
        $avis = array();
        $stmt = $this->_PDO->query("SELECT * FROM avis");

        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
            $avis[] = $this->hydrateAvis($data);
            }
        }
        else
            $avis = null;
        return $avis;
    }
    
    public function aDejaDonneSonAvis($idUser, $idProduit){
        $stmt = $this->_PDO->query("SELECT id FROM avis WHERE idAuteur = ".  intval($idUser)." AND idProduit = ".  intval($idProduit)." ;");
        if($stmt->rowCount() ==  0)
            return false;
        else
            return true;
    }
    
    
    public function modifierAvis(Avis $avis){
        
        $req = "UPDATE avis set datePub = '".$avis->getDatePublication()."', ";
        $req .= " dateValid = '".$avis->getDateValidation()."', ";     
        $req .= " note = '".$avis->getNote()."', ";     
        $req .= " commentaire = '".$avis->getCommentaire()."', ";     
        $req .= " estValide = '".$avis->estValide()."', ";     
        $req .= " idAuteur = ".$avis->getAuteur()->getId()." ";     
        $req .= " WHERE id = ".$avis->getid()." ;";
        
        $stmt = $this->_PDO->exec($req);
        
        if($stmt == 1)
            return true;
        else
            return false;
    }
    
    public function supprimerAvisById($idAvis){
        $stmt = $this->_PDO->exec("DELETE FROM avis WHERE id = ".intval($idAvis)." ;");
        if($stmt == 1)
            return true;
        else
            return false;
    }
    
    public function supprimerAvisByAuteur($idAuteur){
        $stmt = $this->_PDO->exec("DELETE FROM avis WHERE idAuteur = ".intval($idAvis)." ;");
        if($stmt >= 1)
            return true;
        else
            return false;
    }
    
    
    
    public function hydrateAvis($data){
        $userDAO = new UserDAO();
        $produitDAO = new ProduitDAO();
        return new Avis($data->id, $data->datePub, $data->dateValid, $data->note, $data->commentaire, $userDAO->getUserByIdAvis($data->id), $data->estValide, $produitDAO->getProduitById($data->idProduit));
    }
    
}




?>
